
# pytest fixture

"""
fixture(scope,autouse,params,ids,name):
    autouse : 代表fixture是自动执行 ，若把他的值设置为True时，就会被自动调用 ，是False的话 ，就不会被自动调用。
    scope : 代表当前标注的函数在测试用例中如何运行 ，它的值只有 ： session ,package ,module ,class ,function
        session : 在整个项目下只运行一次
        package : 在整个包下只运行一次
        module : 在整个模块下只运行一次
        class : 在整个类下只运行一次
        function : 在整个方法下只运行一次 ，它也是scope的默认值
    params : 数据参数化
    ids : 它是给生成结果的fixture进行重命名 ，前提条件就是必须 ： params
    name : 给fixture函数起个别名。
"""
import pytest
from package_unittest.login import login


cases = [('输入正确的用户名和正确的密码进行登录',0,'admin','123456'),
         ('输入正确的用户名和错误的密码进行登录',3,'admin','1234567'),
         ('输入正确的用户名和空的密码进行登录',2,'admin',''),
         ('输入空的用户名和正确的密码进行登录',1,'','123456')]


def ids():
    return [ x[0] for x in cases ]


@pytest.fixture(params=cases,ids=ids(),name='fd')
def fixture_demo(request):          # request是固定的参数名
    print("hello world")
    yield request.param         # 获取params中的数据
    print("hello python")



class TestLogin():

    # case1 : 输入正确的用户名和正确的密码进行登录
    def test_login(self,fd):
        print("1")
        expect_result = fd[1]
        username = fd[2]
        password = fd[3]
        actual_result = login(username,password).get('code')
        assert expect_result == actual_result



if __name__ == '__main__':
    pytest.main(['test13_login_fixture_name.py','-sv'])

